package cn.hyatt.auth.service;

import cn.hyatt.auth.dto.systemMenu.SystemMenuFindDto;
import cn.hyatt.auth.dto.systemMenu.SystemMenuSaveDto;
import cn.hyatt.auth.dto.systemMenu.SystemMenuUpdateDto;
import cn.hyatt.auth.dto.systemMenu.SystemMenuVo;
import cn.hyatt.auth.entity.SystemMenu;
import cn.hyatt.auth.enums.MenuType;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 系统菜单-服务接口
 *
 * @author hyatt
 */
public interface SystemMenuService extends IService<SystemMenu> {
    /**
     * 按列表查找
     *
     * @param dto 查找条件对象
     * @return 结果
     */
    List<SystemMenu> findByList(SystemMenuFindDto dto);

    /**
     * 按页面查找
     *
     * @param dto 查找条件对象
     * @return 结果
     */
    IPage<SystemMenu> findByPage(SystemMenuFindDto dto);

    /**
     * 按类型和角色查找
     * @param types   菜单类型列表
     * @param roleIds 角色Id列表
     * @return 结果
     */
    List<SystemMenu> findByTypeAndRole(List<MenuType> types, List<Long> roleIds);

    /**
     * 保存
     *
     * @param dto 保存数据对象
     */
    void save(SystemMenuSaveDto dto);

    /**
     * 更新
     *
     * @param id  ID
     * @param dto 更新数据对象
     */
    void update(Long id, SystemMenuUpdateDto dto);

    /**
     * 按 Id 删除
     *
     * @param id ID
     */
    void deleteById(Long id);

    /**
     * 转 Vo 对象
     *
     * @param entity 实体对象
     * @return 结果
     */
    SystemMenuVo toVo(SystemMenu entity);
}
